package com.lishe.lishe.alipay;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;

import com.alipay.sdk.app.PayTask;

import java.util.Map;

/**
 * Created by lwa on 2017/8/21.
 * 支付宝支付
 */

public class AliPayUtils {

    /**
     * 支付宝支付业务：入参app_id
     */
    public static final String APPID = "";

    /**
     * 支付宝账户登录授权业务：入参pid值
     */
    public static final String PID = "";
    /**
     * 支付宝账户登录授权业务：入参target_id值
     */
    public static final String TARGET_ID = "joy@lishe.cn";

    /** 商户私钥，pkcs8格式 */
    /** 如下私钥，RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一个 */
    /** 如果商户两个都设置了，优先使用 RSA2_PRIVATE */
    /** RSA2_PRIVATE 可以保证商户交易在更加安全的环境下进行，建议使用 RSA2_PRIVATE */
    /** 获取 RSA2_PRIVATE，建议使用支付宝提供的公私钥生成工具生成， */
    /**
     * 工具地址：https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
     */
    public static final String RSA2_PRIVATE = "";
    public static final String RSA_PRIVATE = "";


    private static final int SDK_PAY_FLAG = 1;
    private static final int SDK_AUTH_FLAG = 2;

    /**
     * 支付宝支付业务
     */

    public static void payV2(final Activity context, final String orderInfo, final Handler handler) {

//        if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) {
//            new AlertDialog.Builder(context).setTitle("警告").setMessage("需要配置APPID | RSA_PRIVATE")
//                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
//                        public void onClick(DialogInterface dialoginterface, int i) {
//                            context.finish();
//                        }
//                    }).show();
//            return;
//        }
//
//        /**
//         * 这里只是为了方便直接向商户展示支付宝的整个支付流程；所以Demo中加签过程直接放在客户端完成；
//         * 真实App里，privateKey等数据严禁放在客户端，加签过程务必要放在服务端完成；
//         * 防止商户私密数据泄露，造成不必要的资金损失，及面临各种安全风险；
//         *
//         * orderInfo的获取必须来自服务端；
//         */
//        boolean rsa2 = (RSA2_PRIVATE.length() > 0);
//        Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, orderObject, rsa2);
//        String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
//
//        String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;
//        String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2);
//        final String orderInfo0 = orderParam + "&" + sign;//客户端测试验签

        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                PayTask alipay = new PayTask(context);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                //Log.e("msp", result.toString());
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                handler.sendMessage(msg);
//                receiveMsg(context, msg);
            }
        };

        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

//    private static void receiveMsg(Context context, Message msg) {
//        switch (msg.what) {
//            case SDK_PAY_FLAG: {
//                @SuppressWarnings("unchecked")
//                PayResult payResult = new PayResult((Map<String, String>) msg.obj);
//                /**
//                 对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
//                 */
//                String resultInfo = payResult.getResult();// 同步返回需要验证的信息
//                String resultStatus = payResult.getResultStatus();
//                Log.e("msp验证结果", resultInfo.toString());
//                // 判断resultStatus 为9000则代表支付成功
//                if (TextUtils.equals(resultStatus, "9000")) {
//                    Log.e("msp验证结果", "支付成功1");
//                    // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
//                    HttpPay.recharge(token, resultInfo.toString(), respose);
////                    Toast.makeText(context, "支付成功", Toast.LENGTH_SHORT).show();
//                } else {
//                    // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
//                    Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
//                }
//                break;
//            }
//            case SDK_AUTH_FLAG: {
//                @SuppressWarnings("unchecked")
//                AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
//                String resultStatus = authResult.getResultStatus();
//
//                // 判断resultStatus 为“9000”且result_code
//                // 为“200”则代表授权成功，具体状态码代表含义可参考授权接口文档
//                if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
//                    // 获取alipay_open_id，调支付时作为参数extern_token 的value
//                    // 传入，则支付账户为该授权账户
//                    Toast.makeText(context,
//                            "授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT)
//                            .show();
//                } else {
//                    // 其他状态值则为授权失败
//                    Toast.makeText(context,
//                            "授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();
//                }
//                break;
//
//            }
//            case 3:
//                Toast.makeText(context,"充值成功！", Toast.LENGTH_SHORT).show();
//                break;
//            default:
//                break;
//        }
//    }

//    static AsyncHttpResponseHandler respose = new AsyncHttpResponseHandler() {
//        @Override
//        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//            String result = new String(responseBody);
//            Log.e("充值result",result);
//            try {
//                JSONObject jsonObject = new JSONObject(result);
//                String msg = jsonObject.optString("msg");
//                if (jsonObject.optInt("errcode") == 0 && jsonObject.optInt("result") == 100) {
//
//                    Log.e("充值成功", "chongzhi ");
//                    Message msg0 = new Message();
//                    msg0.what = 3;
//                    receiveMsg(context, msg0);
//                } else {
//
//                }
//
//            } catch (JSONException e) {
//                e.printStackTrace();
//            }
//        }
//
//        @Override
//        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
//
//        }
//    };

}
